home *** CD-ROM | disk | FTP | other *** search
- {
- File: dcmd.p
-
- Contains: MacsBug debugger command interface.
-
- Version: Technology: MacsBug
-
- Release: 6.5.3
-
- Copyright: ⌐ 1984-1995 by Apple Computer, Inc.
-
- All rights reserved.
-
- Bugs?: If you find a problem with this file, send the file and version
- information (from above) and the problem description to:
-
- Internet: apple.bugs@applelink.apple.com
- AppleLink: APPLE.BUGS
-
- }
- {$IFC UNDEFINED UsingIncludes}
- {$SETC UsingIncludes := 0}
- {$ENDC}
-
- {$IFC NOT UsingIncludes}
- UNIT dcmd;
- INTERFACE
- {$ENDC}
-
- {$IFC UNDEFINED __DCMD__}
- {$SETC __DCMD__ := 1}
-
- {$I+}
- {$SETC dcmdIncludes := UsingIncludes}
- {$SETC UsingIncludes := 1}
-
- {$IFC UNDEFINED __MACTYPES__}
- {$I MacTypes.p}
- {$ENDC}
- {$IFC UNDEFINED __MACHINEEXCEPTIONS__}
- {$I MachineExceptions.p}
- {$ENDC}
-
- {$PUSH}
- {$ALIGN MAC68K}
- {$LibExport+}
-
- { Possible requests from the debugger to the command }
-
- CONST
- dcmdInit = 0; { Initialize the Dcmd }
- dcmdDoIt = 1; { Normal Dcmd execution }
- dcmdHelp = 2; { Display help for Dcmd }
- { Requests added to MacsBug in 6.5d10 that are only sent to format 3 or newer dcmds. }
- dcmdSecondaryInit = 3; { Second time to init after all System patches have been loaded }
- dcmdShutdown = 4; { Dcmd should remove any patches (if possible) }
- dcmdGetInfo = 5; { Return dcmd version and pointer to help text }
- { 68K register file indices╩into the RegisterFile. }
- D0Register = 0;
- D1Register = 1;
- D2Register = 2;
- D3Register = 3;
- D4Register = 4;
- D5Register = 5;
- D6Register = 6;
- D7Register = 7;
- A0Register = 8;
- A1Register = 9;
- A2Register = 10;
- A3Register = 11;
- A4Register = 12;
- A5Register = 13;
- A6Register = 14;
- A7Register = 15;
- PCRegister = 16;
- SRRegister = 17; { SR is only 16 bits and is stored in the high word }
- { Heap block types }
- freeBlock = 0;
- nonrelocatableBlock = 1;
- relocatableBlock = 2;
- { The format of the 68K registers passed to the dcmd. }
-
- TYPE
- RegisterFile = ARRAY [0..17] OF UInt32;
-
- RegisterFilePtr = ^RegisterFile;
-
- { Structure used to pass information to and from the dcmd. }
- dcmdBlock = PACKED RECORD
- registerFile: RegisterFilePtr; { pointer to 68K CPU register set }
- request: INTEGER; { what action we are requested to take }
- aborted: BOOLEAN; { Set to true if the user types a key while scrolling }
- pad1: BOOLEAN; { align to word boundary }
- macsBugVersion: UInt32; { version of MacsBug we are running under }
- maxCallback: UInt16; { maximum valid callback we can make }
- currentISA: UInt8; { ISA of current PC }
- pad2: UInt8; { align to word boundary }
- theException: ^ExceptionInformationPowerPC; { Pointer to PowerPC machine state if ISA is PowerPC }
- requestIOBlock: Ptr; { general-purpose input/output data block pointer }
- END;
- dcmdBlockPtr = ^dcmdBlock;
-
- GetInfoRequestBlock = RECORD
- usageStr: Str255;
- creditsStr: Str255;
- dcmdVersion: NumVersion;
- END;
- GetInfoRequestBlockPtr = ^GetInfoRequestBlock;
-
- {
- MacsBug callback routines that can be called by the dcmd.
- }
-
- {
- Draw the text in the Pascal string as one or more lines separated by CR's.
- Each line causes the MacsBug display to be scrolled and the new line to be
- drawn at the bottom. If the user types a key while scrolling then the aborted
- flag is set telling the command to terminate immediately.
- }
- PROCEDURE dcmdDrawLine(str: ConstStr255Param);
-
- {
- Draw the text in the Pascal string as a continuation of the current line.
- CR's are not given special treatment.
- }
- PROCEDURE dcmdDrawString(str: ConstStr255Param);
-
- {
- Draw a given number of characters starting from the given pointer as a
- continuation of the current line. CR's are not given special treatment.
- }
- PROCEDURE dcmdDrawText(text: StringPtr; length: INTEGER);
-
- {
- Scrolls the MacsBug display up one line leaving a blank line at the bottom.
- }
- PROCEDURE dcmdScroll;
-
- {
- Display the Pascal string in the command line area and wait for a key to be pressed.
- Return TRUE if the user typed Return. All other keys return FALSE. MacsBug saves this
- key and adds it to the command line once the current command completes. Typing any
- key other than Return sets the aborted flag and tells the command to terminate immediately.
- }
- FUNCTION dcmdDrawPrompt(str: ConstStr255Param): BOOLEAN;
-
- {
- Get the current command line position.
- }
- FUNCTION dcmdGetPosition: INTEGER;
-
- {
- Set the current command line position. This should only be set to a value returned
- by dcmdGetPosition.
- }
- PROCEDURE dcmdSetPosition(pos: INTEGER);
-
- {
- Return the next character on the command line or CR if the entire line has been scanned
- }
- FUNCTION dcmdGetNextChar: INTEGER;
-
- {
- Return the next character on the command line or CR if the entire line has been scanned.
- However, the current command line position is not changed.
- }
- FUNCTION dcmdPeekAtNextChar: INTEGER;
-
- {
- Copy all characters from the command line to the parameter string until a delimiter
- is found or the end of the command line is reached. A delimiter is either a space,
- a comma or a CR. Both single and double quoted strings are allowed on the command
- line. However, the leading and trailing quotes must be of the same type. The parameter
- string is returned without the quotes. This function returns the delimiter.
- }
- FUNCTION dcmdGetNextParameter(str: Str255): INTEGER;
-
- {
- Parse the command line for the next expression. All expressions are evaluated to 32 bits.
- This function returns the delimiter after the expression. The possible delimiters are
- space, comma and CR. Space is not treated as a delimiter in the middle of expressions,
- unless it's before a binary '-' (minus). For instance, '1 + 2' will return a value of 3
- and the delimiter will be the char following the 2. '1 - 2' will return a value of 1
- and the delimeter is the space character before the '-'. This is done so that built-in
- commands and dcmds can properly parse '-x' options. The return parameter 'ok' tells if
- the expression was parsed successfully as far as syntax is concerned.
- }
- FUNCTION dcmdGetNextExpression(VAR value: LONGINT; VAR ok: BOOLEAN): INTEGER;
-
- {
- Copy the break message MacsBug displayed the last time it was entered into str.
- This may contain multiple lines separated by CR's.
- }
- PROCEDURE dcmdGetBreakMessage(str: Str255);
-
- {
- Return a symbolic representation for address in str. If no symbol can be found
- then an empty string is returned. The format of the symbol returned is Name+00000.
- }
- PROCEDURE dcmdGetNameAndOffset(address: LONGINT; str: Str255);
-
- {
- Return the trap name for the trap number. If no symbol can be found
- then an empty string is returned.
- }
- PROCEDURE dcmdGetTrapName(trapNumber: INTEGER; trapName: Str255);
-
- {
- Return a pointer the macro name for the given value. If no macro can be found
- then a nil is returned.
- }
- FUNCTION dcmdGetMacroName(value: LONGINT): StringPtr;
-
- {
- When a debugger command is called, the debugger's world (low memory) is installed.
- Commands that want to reference the user's world can swap back and forth between the
- two worlds by making this call. This procedure does nothing in MacsBug; there is no
- distinction between user and debugger worlds. It is included to support other
- debuggers that might want to take advantage of it.
- }
- PROCEDURE dcmdSwapWorlds;
-
- {
- Toggle between the user and debugger displays. The first call restores the user's actual screen.
- The second call restores the debugger's screen.
- }
- PROCEDURE dcmdSwapScreens;
-
- {
- Walk through the blocks in the current heap, calling DoThis for each block. DoThis should
- be a procedure of the form:
-
- pascal void DoThis (long blockAddress, long blockLength, long addrOfMasterPtr,
- short blockType, Boolean locked, Boolean purgeable, Boolean resource)
-
- The blockAddress and blockLength pertain to the data in the heap block, not including
- the block header. The addrOfMasterPtr is the master pointer's location in the heap,
- not the value of the master ptr. The blockType is defined by the constants freeBlock,
- nonrelocatableBlock and relocatableBlock. The booleans locked, purgeable and resource
- reflect the state of the block.
- }
-
-
- TYPE
- DoThisPtr = ProcPtr; { PROCEDURE DoThisPtr(blockAddress: LONGINT; blockLength: LONGINT; addrOfMasterPtr: LONGINT; blockType: INTEGER; locked: BOOLEAN; purgeable: BOOLEAN; resource: BOOLEAN); }
-
-
- PROCEDURE dcmdForAllHeapBlocks(DoThis: DoThisPtr);
- {$ALIGN RESET}
- {$POP}
-
- {$SETC UsingIncludes := dcmdIncludes}
-
- {$ENDC} {__DCMD__}
-
- {$IFC NOT UsingIncludes}
- END.
- {$ENDC}
-